package com.zmn.plat.persistence.interfaces.push;

import com.zmn.common.dto.VtDTO;
import com.zmn.plat.model.entity.push.notice.PushNoticeApp;
import com.zmn.plat.model.entity.push.notice.PushNoticeAppQuery;
import com.zmn.plat.model.entity.push.notice.PushNoticeAppSearchEngineerQuery;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 描述: app 公告推送数据库访问
 *
 * @author wangjie
 * @since 2020/3/21
 **/
public interface PushNoticeAppDao {

    /**
     * 描述: 根据主键查询数据
     *
     * @param id 主键id
     * @return com.zmn.plat.model.entity.push.notice.PushNoticeApp
     * @author wangjie
     * @since 2020/3/21
     **/
    PushNoticeApp findByKey(@Param(value = "id") Integer id);

    /**
     * 描述: 根据条件查询数据
     *
     * @param query 查询对象
     * @return java.util.List<com.zmn.plat.model.entity.push.notice.PushNoticeApp>
     * @author wangjie
     * @since 2020/3/21
     **/
    Integer countPageByQuery(PushNoticeAppQuery query);

    /**
     * 描述: 根据条件查询数据
     *
     * @param query 查询对象
     * @return java.util.List<com.zmn.plat.model.entity.push.notice.PushNoticeApp>
     * @author wangjie
     * @since 2020/3/21
     **/
    List<PushNoticeApp> listPageByQuery(PushNoticeAppQuery query);

    /**
     * 描述: 查询出小于time，并且状态为 status 的数据
     *
     * @param time   传入时间 默认 nowTime
     * @param status 数据状态 默认 启用 2
     * @return java.util.List<com.zmn.plat.model.entity.push.notice.PushNoticeApp>
     * @author wangjie
     * @since 2020/3/21
     **/
    List<PushNoticeApp> listPushNoticeLessTimeAndStatus(@Param(value = "time") Date time,
                                                        @Param(value = "status") Integer status);

    /**
     * 描述: 查询推送工程师
     *
     * @param pushNoticeAppSearchEngineerQuery 查询推送工程师
     * @return java.util.List<java.lang.Integer>
     * @author wangjie
     * @since 2020/3/31
     **/
    List<Integer> listPushNoticeToEngineer(PushNoticeAppSearchEngineerQuery pushNoticeAppSearchEngineerQuery);

    /**
     * 描述: 查询有效的app公告数据
     *
     * @param putType 推送类型
     * @param nowTime 时间吗
     * @param status  状态
     * @param putApp  推送app
     * @return java.util.List<com.zmn.plat.model.entity.push.notice.PushNoticeApp>
     * @author wangjie
     * @since 2020/4/1
     **/
    PushNoticeApp findPushByValidData(@Param(value = "putType") Integer putType,
                                      @Param(value = "nowTime") Date nowTime,
                                      @Param(value = "status") Integer status,
                                      @Param(value = "putApp") Integer putApp);

//    /**
//     * 描述: 查询所有技能分组接口
//     * 兼容（待删除）
//     */
//    List<VtDTO> findAllGroup();

    /**
     * 描述: 根据key修改
     *
     * @param pushNoticeApp app公告对象  对象中必须有key值
     * @author wangjie
     * @since 2020/3/21
     **/
    void updateByKey(PushNoticeApp pushNoticeApp);

    /**
     * 描述: 通过主键集合修改状态
     *
     * @param pushNoticeKeys 主键key
     * @param status         状态值
     * @param operator       操作人
     * @author wangjie
     * @since 2020/3/21
     **/
    void updateStatusByKeys(@Param(value = "pushNoticeKeys") List<Integer> pushNoticeKeys,
                            @Param(value = "status") Integer status,
                            @Param(value = "operator") String operator);

    /**
     * 描述: 新增数据
     *
     * @param pushNoticeApp app公告对象
     * @return java.lang.Integer 新增后的id
     * @author wangjie
     * @since 2020/3/21
     **/
    Integer insert(PushNoticeApp pushNoticeApp);


}
